function mngrpusu() {
	$('#content').load("html/manterperfis.html #pnlMntrPerfis", function() {

		montarGridPerfis();
		
		$('#btnSalvarPermissoes').click(function(e) {
			e.preventDefault();
			salvarNovoGrupo();
		});

		$('#tabs').tabs({
			activate: function(event, ui) {
				if ($(ui.newTab).find('a').html() == "Permissões de Acesso") {
					montarArvoreGrupos();
					
					montarArvorePermissoes();
				}
			}
		});
		$('#tabRecursos').tabs();
		$('#tabGrupos').tabs();
		$('#pnlControles').tabs();
	});
}

function montarGridPerfis() {
	var pCampos = {
	    subs: {
	    	title: 'Subs',
	    	width: '5%',
	    	sorting: false,
	    	edit: false,
	    	create: false,
	    	display: function(dados) {
	    		var img = $('<img>').attr({src: "css/themes/lightcolor/add.png", title:"Exibir subperfis"});
	    		$(img).click(function() {
	    			abrirSub(img.closest('tr'), dados.record);
	    		});
	    		return img;
		    }},
		users: {
			title: 'Usuários',
			width: '5%',
			sorting: false,
			edit: false,
			create: false,
			display: function(dados) {
	    		var img = $('<img>').attr({src: "css/themes/lightcolor/add.png", title:"Exibir Usuários do Perfil"});
	    		$(img).click(function() {
	    			abrirUsers(img.closest('tr'), dados.record);
	    		});
	    		return img;
			}},
    	id: {key: true,
	   		 create: false,
	   		 edit: false,
	   		 list: false},
	   	grupo: {title: 'Perfil',
	   			sorting: true,
	           	width: '40%'}
		};
	var pFiltro = new Array({campo: 'grupo', titulo: 'Perfil', selecionado: true});
	
	$('#pnlPerfis').load("html/manter.html #pnlMntr", function() {
		// campos de filtro
		var pnlFiltro = $('<div>');
		var cbb = $('<select>').attr({id: 'cbbCampo', name: 'cbbCampo'});
		var ipt = $('<input>').attr({type : "text", name: 'edtFiltro', id: 'edtFiltro'});
		var item = null;
		
		for (var opt in pFiltro) {
			item = $('<option>').attr({
					value: pFiltro[opt].campo,
					
				}).append(pFiltro[opt].titulo);

			if (pFiltro[opt].selecionado) {
				$(item).attr({selected: "selected"});
			}

			$(cbb).append(item);
		}
		$(pnlFiltro).append(cbb, " ", ipt);
		// fim campos de filtro

		$('#grdDataset').jtable({
		    messages: getJTableMessages(),
			title: '&nbsp;',
			paging: true,
			selecting: true,
			multiselect: true,
			actions: {
	                listAction: 'post.php?action=grupousuarios.consultar',
	                createAction: 'post.php?action=grupousuarios.inserir',
	                updateAction: 'post.php?action=grupousuarios.alterar',
	                deleteAction: 'post.php?action=grupousuarios.excluir'
			},
	        fields: pCampos,
	        sorting: true,
	        toolbar: {
			hoverAnimation: true,
			items: [{text:  $(pnlFiltro)},
					{text: 'Filtrar',
					click: carregarDadosGrid},
					{text: 'Excluir selecionados',
					 click: excluirSelecionados,
					 icon: 'css/themes/lightcolor/delete.png'
					}]
			},
		    defaultSorting: 'grupo ASC',
		    formCreated: function(evento, dados) {
		    	dados.form.append(
			    	$('<div>').load("html/pnlcontextos.html #pnlContextos", function(e) {
			    		var grupoid = (dados.formType == 'create') ? "null" : dados.record.id;
			    		var grupopai = ((dados.record == undefined ) || (dados.record.subde == null)) ? "self" : dados.record.subde;
			    		var params = [{
						    			nome: "action",
						    			valor: "grupousuarios.consultarContextos"
						    		},
						    		{
						    			nome: "grupos",
						    			valor: grupoid + "," + grupopai + ",self"
						    		}];
			    		exec(params, function(rs) {
			    			for(var x in rs.Records) {
			    				switch (rs.Records[x].grupoid) {
			    				case grupoid:
				    				$('#pnlContexto').append(novoContexto(rs.Records[x]));
			    					break;
			    				default:
			    					formatarContexto(rs.Records[x]);
			    					break;
			    				}
			    			}
			    			$('#fldContexto').empty();
			    			$('#fldContexto').remove();
			    		});
				    	$('#pnlContextos').tabs();
			    	})
		    	);
		    }
		});
		
		// carregar dados
	    carregarDadosGrid();
		
		$('#grdDataset').show();
	    $('#pnlMntr').draggable();
	});
}

function caracterizarComponente(componente, id) {
	return componente.contents(
				).filter(function () {
					return $(this).attr("id") != undefined;
				}).each(function () {
					$(this).attr("id", $(this).attr("id") + id);
					if ($(this).attr("name") != undefined) {
						$(this).attr("name", $(this).attr("name") + id);
					}
					caracterizarComponente($(this), id);
				});
}

function novoContexto(contexto) {
	var fldset = caracterizarComponente($('#pnlContexto').clone(), "_" + contexto.id);

	fldset.find('#lblContexto_' + contexto.id).html(contexto.contexto);
	fldset.find('#lblAclim_' + contexto.id).html(contexto.texto_aclim);
	fldset.find('#lblAcliv_' + contexto.id).html(contexto.texto_acliv);
	fldset.find('#lblAalim_' + contexto.id).html(contexto.texto_aalim);
	fldset.find('#lblAaliv_' + contexto.id).html(contexto.texto_aaliv);
	
	if (contexto.acessoConsulta == 1) {
		fldset.find('#rdAcliv_' + contexto.id).attr("checked", "checked");
	}
	
	if (contexto.acessoAlteracao == 1) {
		fldset.find('#rdAaliv_' + contexto.id).attr("checked", "checked");
	}
	return fldset;
}

function formatarContexto(contexto) {
	if (contexto.acessoConsulta == 0) {
		$('#rdAcliv_' + contexto.id).attr("disabled", "disabled");
	}

	if (contexto.acessoAlteracao == 0) {
		$('#rdAaliv_' + contexto.id).attr("disabled", "disabled");
	}
}

function abrirSub(tr, perfil) {
	var pCampos = {
		    subs: {
		    	title: 'Subs',
		    	width: '5%',
		    	sorting: false,
		    	edit: false,
		    	create: false,
		    	display: function(dados) {
		    		var img = $('<img>').attr({src: "css/themes/lightcolor/add.png", title:"Exibir subperfis"});
		    		$(img).click(function() {
		    			abrirSub(img.closest('tr'), dados.record);
		    		});
		    		return img;
			    }},
	    	id: {key: true,
		   		 create: false,
		   		 edit: false,
		   		 list: false},
		   	grupo: {title: 'Perfil',
		   			sorting: true,
		           	width: '40%'}
			};
	$('#grdDataset').jtable('openChildTable', 
						tr, 
						{
							title : 'Subperfis de ' + perfil.grupo,
						    messages: getJTableMessages(),
							selecting: true,
							actions: {
				                listAction: 'post.php?action=grupousuarios.consultar&subde=' + perfil.id,
				                createAction: 'post.php?action=grupousuarios.inserir&subde=' + perfil.id,
				                updateAction: 'post.php?action=grupousuarios.alterar&subde=' + perfil.id,
				                deleteAction: 'post.php?action=grupousuarios.excluir'
							},
					        fields: pCampos,
						    formCreated: function(evento, dados) {
						    	dados.form.append(
							    	$('<div>').load("html/pnlcontextos.html #pnlContextos", function(e) {
							    		var grupoid = (dados.formType == 'create') ? "null" : dados.record.id;
							    		var grupopai = ((dados.record == undefined ) || (dados.record.subde == null)) ? "self" : dados.record.subde;
							    		var params = [{
										    			nome: "action",
										    			valor: "grupousuarios.consultarContextos"
										    		},
										    		{
										    			nome: "grupos",
										    			valor: grupoid + "," + grupopai + ",self"
										    		}];
							    		exec(params, function(rs) {
							    			for(var x in rs.Records) {
							    				switch (rs.Records[x].grupoid) {
							    				case grupoid:
								    				$('#pnlContexto').append(novoContexto(rs.Records[x]));
							    					break;
							    				default:
							    					formatarContexto(rs.Records[x]);
							    					break;
							    				}
							    			}
							    			$('#fldContexto').empty();
							    			$('#fldContexto').remove();
							    		});
								    	$('#pnlContextos').tabs();
							    	})
						    	);
						    }
					    },
						function (data) {
							data.childTable.jtable('load');
						});
}

function abrirUsers(tr, perfil) {
	var pCampos = {
	    	pk: {key: true,
		   		 create: false,
		   		 edit: false,
		   		 list: false},
		   	usuario: {title: 'Usuário',
		    	sorting: true}
			};

	$('#grdDataset').jtable('openChildTable', 
			tr, 
			{
				title : 'Usuários de ' + perfil.grupo,
			    messages: getJTableMessages(),
				selecting: true,
				actions: {
	                listAction: 'post.php?action=grupousuarios.consultarUsuarios&grupoid=' + perfil.id,
	                createAction: 'post.php?action=grupousuarios.inserirUsuario&grupoid=' + perfil.id,
	                deleteAction: 'post.php?action=grupousuarios.excluirUsuario&grupo=' + perfil.id
				},
		        fields: pCampos,
		        formCreated: function(event, data) {
		        	$('input[name="usuario"]').autocomplete({
		        		source: function (request, response) {
		        			params = [{
		        							nome: "action",
		        							valor: "grupousuarios.consultarUsuariosDisponiveis"
		        						},
		        						{
		        							nome: "grupoid",
		        							valor: perfil.id
		        						},
		        						{
		        							nome: "usuario",
		        							valor: request.term
		        						}];

		        			exec(params, 
		        					function(dados) {
		        						if (dados.Records) {
			        						response($.map(dados.Records, function (item) {
			        							return item.usuario;
			        						}));
		        						}
		        					});
		        		}
		        	});
		        }
		    },
			function (data) {
				data.childTable.jtable('load');
			});
}

function montarArvoreGrupos() {
	params = [{
		nome: "action",
		valor: "grupousuarios.consultarArvore"
	}];

	treeCfg = {
		data : {
			key : {
				name : "grupo",
				children : "subs"
			}
		},
		callback: {
			onClick: function (evento, tree, node) {
				var nodes = $.fn.zTree.getZTreeObj(tree).getSelectedNodes();
				preencherPermissoes(node.id, nodes.length == 1);
			}
		}
	};

	montarArvore($("#arvGrupos"), params, treeCfg);
}

function montarArvorePermissoes() {
	params = [{
		nome: "action",
		valor: "recurso.consultarArvore"
	}];

	treeCfg = {
		check : {
			enable : true
		},
		data : {
			key : {
				name : "titulo",
				children : "subs"
			}
		}
	};
	
	exec(params, function(dados) {
		$("#arvRecursos").addClass("ztree");
		var tree = $.fn.zTree.init($("#arvRecursos"), treeCfg, dados.Records);
		tree.expandAll(true);
		checarPermissoes(tree);
	});
}

function preencherPermissoes(grupo, limpar) {
	var tree = $.fn.zTree.getZTreeObj("arvRecursos");
	if (limpar) {
		tree.checkAllNodes(false);
	} 

	params = [{
				nome: "action",
				valor: "acesso.consultarArvore"
			},
			{
				nome: "id",
				valor: grupo
			}];

	exec(params, function(dados2) {
		carregarPermissoes(tree, dados2.Records);
	});
}

function carregarPermissoes(tree, regs) {
	if (regs != null) {
		for(var x in regs) {
			node = tree.getNodeByParam("id", regs[x].recursoid);
			if (node != null && !node.chkDisabled) {
				if (regs[x].acesso) {
					tree.checkNode(node, true, false);
					carregarPermissoes(tree, regs[x].recursos);
				}
			}
		}
	}
}

function checarPermissoes(tree) {
	var nodes = tree.transformToArray(tree.getNodes());

	for (var x in nodes) {
		if (nodes[x].selfPerm == 0) {
			tree.setChkDisabled(nodes[x], true, false, true);
		}
	}
}

function salvarNovoGrupo() {
	var pRecursos = "";
	var treeObj = $.fn.zTree.getZTreeObj("arvGrupos");
	var recursos = treeObj.getSelectedNodes(true);
	var pGrupo = "";
	var pAction = "";
		
	if (recursos.length > 0) {
		
		if (recursos.length > 1) {
			pGrupo = $('#novogrupo').val();
			pAction = "grupousuarios.inserirCustom";
		} else {
			pGrupo = recursos[0].id;
			pAction = "acesso.atualizarGrupo";
		}

		treeObj = $.fn.zTree.getZTreeObj("arvRecursos");
		recursos = treeObj.getCheckedNodes(true);
		treeObj.expandAll(false);
		
		for (var x in recursos) {
			if (pRecursos.length > 0) {
				pRecursos = pRecursos + ",";
			}
			pRecursos = pRecursos + recursos[x].id;
		}
		
		params = [{
			nome: "action",
			valor: pAction
		}, 
		{
			nome: "grupo",
			valor: pGrupo
		},
		{
			nome: "recursos",
			valor: pRecursos
		}];
	
		exec(params, function(e) {
			if (e.Result == "OK") {
				montarArvoreGrupos();
				preencherPermissoes(0, true);
			}
			mostrarMensagem(e.Message, (e.Result == "OK") ? "m" : "e");
		});
	} else {
		mostrarMensagem("Não há perfis selecionados.", "e");
	}
}